﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using KBManagement.DAL;
using KBManagement.BIZ;
using KBManagement.Library;


namespace KBManagement
{
    public partial class DiaLogEditAddCustomer : Form
    {
        CustomerFacade customerFacade;
        KBSQLClassDataContext context;
        private Customer cus;
        public DiaLogEditAddCustomer(Customer cus)
        {
            this.cus = cus;
            context = Utils.CreateInstance().GetDBContext();
            customerFacade = new CustomerFacade();
            InitializeComponent();
            if (cus != null)
            {
                label66.Text = "Cập nhật thông tin khách hàng";
                txtName.Text = cus.FullName;
                txtAddress.Text = cus.Adddress;
                txtMail.Text = cus.Email;
                txtphone.Text = cus.Phone;
            }
            else
            {
                label66.Text = "Thêm mới khách hàng";
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                bool isValid = validate();
                if (isValid)
                {
                    if (cus != null)
                    {
                        Update();
                    }
                    else
                    {
                        Insert();
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show("Thông tin bạn nhập có thể không lưu được vì xảy ra lỗi.Lỗi đã được hệ thống ghi lại và chờ xử lý" + ex.Message.ToString());
            }
            
        }

        private void Insert()
        {
            Customer customer = new Customer
            {
                FullName = txtName.Text,
                Adddress = txtAddress.Text,
                Email = txtMail.Text,
                Phone = txtphone.Text
            };
            ConfirmCustomer confirm = new ConfirmCustomer(customer);
            if (confirm.ShowDialog() == DialogResult.OK)
            {
                context.Customers.InsertOnSubmit(customer);
                context.SubmitChanges();
                Utils.CreateInstanceLog().TransactionLogCommon("Nhân viên " + AdminSession.admin.UserName + " thêm mới khách hàng " + txtName.Text + " với số điện thoại "+txtphone.Text+" vào lúc " + DateTime.Now);
                MessageBox.Show("Thêm khách hàng " + txtName.Text + " thành công");
                resetFormCustomer();
                Utils.CreateInstance().NotificationInforObserver();
                Close();
            }
        }

        private bool validate()
        {
            Customer customer = customerFacade.FindByPhone(txtphone.Text);
            if (Utils.CreateInstance().isNull(txtName.Text))
            {
                MessageBox.Show("Hãy nhập vào tên khách hàng");
                return false;
            }
            if (Utils.CreateInstance().isNull(txtphone.Text))
            {
                MessageBox.Show("Hãy nhập vào số điện thoại của khách hàng");
                return false;
            }
            if (cus==null && customer != null)
            {
                MessageBox.Show("Số điện thoại khách hàng đã tồn tại trong hệ thống");
                return false;
            }

            return true;
        }


        private void Update()
        {
            Customer customer = context.Customers.SingleOrDefault(x=>x.ID==cus.ID);
                customer.FullName = txtName.Text;
                customer.Adddress = txtAddress.Text;
                customer.Email = txtMail.Text;
                customer.Phone = txtphone.Text;
            ConfirmCustomer confirm = new ConfirmCustomer(customer);
            if (confirm.ShowDialog() == DialogResult.OK)
            {
                customer.FullName = txtName.Text;
                customer.Email = txtMail.Text;
                customer.Adddress = txtAddress.Text;
                customer.Phone = txtphone.Text;
                context.SubmitChanges();
                MessageBox.Show("Cập nhật khách hàng " + txtName.Text + " thành công");
                Utils.CreateInstanceLog().TransactionLogCommon("Nhân viên " + AdminSession.admin.UserName + " sửa thông tin khách hàng " + cus.FullName + " mã số " + cus.ID + " vào lúc " + DateTime.Now);
                resetFormCustomer();
                Utils.CreateInstance().NotificationInforObserver();
                Close();
            }
        }


        private void resetFormCustomer()
        {
            txtName.Text = "";
            txtMail.Text = "";
            txtAddress.Text = "";
            txtphone.Text = "";
        }
    }
}
